/**
 * 矩阵置零
 * 给定一个 m x n 的矩阵，如果一个元素为 0，则将其所在行和列的所有元素都设为 0
 * 
 * 算法思路：
 * 1. 第一次遍历：记录哪些行和列包含0
 * 2. 第二次遍历：将标记的行和列中的所有元素置为0
 * 
 * @param matrix - 待处理的矩阵（原地修改，不返回值）
 */
function setZeroes(matrix: number[][]): void {
    // 获取矩阵的行数和列数
    const m = matrix.length, n = matrix[0].length
    
    // 记录哪些行包含0
    const rowHasZero = Array(m).fill(false)
    // 记录哪些列包含0
    const colHasZero = Array(n).fill(false)

    // 第一次遍历：标记所有包含0的行和列
    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            if (matrix[i][j] === 0) {
                // 如果当前元素为0，标记该行和该列
                rowHasZero[i] = colHasZero[j] = true
            }
        }
    }

    // 第二次遍历：根据标记将对应行和列的元素置为0
    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            // 如果当前元素所在的行或列被标记为包含0，则将该元素置为0
            if (rowHasZero[i] || colHasZero[j]) {
                matrix[i][j] = 0
            }
        }
    }
};